#ifndef __I_SNAKE_MANAGER_H__
#define __I_SNAKE_MANAGER_H__

#define DWORD		unsigned int
#define NULL		0

#define ERROR_ID	0

#define GOTO_TEST(p)		\
	do						\
	{						\
		if(!(p))			\
			goto Exit0;		\
	} while (false)

#define GOTO_TEST_LOG(p)		\
	do							\
	{							\
		if(!(p))				\
		{						\
			Log(!!!!!);			\
			goto Exit0;			\
		}						\
	} while (false)

enum ENUMXX
{
	E_INALID = -1,

	E_XX_STATE,

	E_TOTAL
};

typedef void (*Func)();

Func m_XXFunc[E_TOTAL];

void FuncXX(ENUMXX XX)
{
	(*m_XXFunc[XX])();
}

struct IMover
{
};

struct IMoverManager/* : public ILogic*/
{
	// == Life Cycle == //
	virtual bool	Init()					= 0;
	virtual void	UnInit()				= 0;
	virtual void	Release()				= 0;

	// == Schedule == //
	virtual void	Tick() = 0;

	// == Manipulation == //
	virtual IMover*	AddMover(DWORD dwID)	= 0;
	virtual	IMover*	GetMover(DWORD dwID)	= 0;
	virtual	bool	DelMover(DWORD dwID)	= 0;

	// == Lua == //
};

#endif	// IMoveActManager